package com.clp.protocol.iec104.iec104.client.state;

import com.clp.protocol.iec104.iec104.apdu.Apdu;

/**
 * 有状态的：对于主站和子站都会有一些状态，这些状态可以重置、当发送或接收apdu时会更新自身状态，并且可以对自身的状态进行监视，保证状态的正常运行
 */
public interface StateFul {
    /**
     * 重置状态，但保留上次连接相关信息
     */
    void reset();

    /**
     * 因为写出了Apdu，所以要调整状态信息
     *
     * @param apdu
     */
    Apdu updateBySending(Apdu apdu);

    /**
     * 因为读入了Apdu，所以要调整状态信息
     *
     * @param apdu
     */
    Apdu updateByRecving(Apdu apdu);

    /**
     * 监视器要执行作业
     */
    void startMonitorTask();

    /**
     * 尝试关闭定时任务
     */
    void tryStopMonitorTask();
}
